import re

from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType, RoleType
from dotenv import load_dotenv
import os
load_dotenv()
Model_Type=os.getenv("MODEL_TYPE")
Model_Api=os.getenv("ZHIPU_API_KEY")
Model_Url=os.getenv("MODEL_URL")
model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI,
    model_type=Model_Type,
    api_key=Model_Api,
    url=Model_Url
)


def should_end_conversation(message, role):
    message_lower = message.lower()

    # 通用结束信号
    end_signals = [
        '没有问题了', '谢谢解答', '感谢帮助', '就先这样',
        '下次再问', '明白了谢谢', '好的再见','期待与你见面'
    ]

    # 角色特定结束模式
    student_end_patterns = [
        r'谢谢.*老师.*没有.*问题',
        r'感谢.*解答.*再见',
        r'明白了.*谢谢.*老师'
    ]
    teacher_end_patterns = [
        r'希望.*有帮助.*再见',
        r'欢迎.*随时.*咨询',
        r'祝.*学习.*愉快',
        r'期待.*到来'
    ]
    # 检查通用信号
    for signal in end_signals:
        if signal in message_lower:
            return True
    # 检查角色特定模式
    if role == 'student':
        for pattern in student_end_patterns:
            if re.search(pattern, message_lower):
                return True
    else:
        for pattern in teacher_end_patterns:
            if re.search(pattern, message_lower):
                return True
    return False


stu_agent = ChatAgent(
    model=model,
    output_language='zh-cn',
    system_message='''
    你是一个好奇的大一新生，对校园生活充满兴趣。
请自然地提问和交流，当获得满意答案后可以礼貌结束对话。''',
)

teacher_agent = ChatAgent(
    model=model,
    output_language='zh-cn',
    system_message='''你是热情的体育老师，乐于帮助新生了解校园。
请专业且友好地回答学生问题，在对话适当时机可以自然结束。
【重要】你觉得可以结束对话了，应明确表示'''
)

max_turns = 6
stu_init_mes = '你好老师，能为我介绍一下我们学校吗？我对校园生活很感兴趣'
print(f'----学生----：{stu_init_mes}')

for _ in range(max_turns):
    # 老师回复
    teacher_response = teacher_agent.step(stu_init_mes)
    teacher_msg = teacher_response.msgs[0].content
    print(f"----老师----：{teacher_msg}")

    #检查终止
    if should_end_conversation(teacher_msg, role='teacher'):
        print('*' * 30)
        print('system infomation:'
              '老师结束了对话')
        print('*' * 30)
        break

    stu_prompt = f'''
    老师的最新回复：{teacher_msg}

    作为新生，请基于老师的回答，做出回应，从以下两点中选择：
    1.继续提问问题
    2.你觉得可以结束了，感谢老师的解答并用合适的语言结束对话并且不要提出任何问题

【重要】你必须从以上两点中选择其中一点，当其中一点出现在对话中时，另一个则不能出现
【重要】你必须提问两次以上问题
    请保持真实的学生语气。'''
    stu_response = stu_agent.step(stu_prompt)
    stu_msg = stu_response.msgs[0].content
    print(f"【学生】: {stu_msg}")


    # 检查终止
    if should_end_conversation(stu_msg, 'student'):
        print("🌟 学生自然地结束了对话")
        break

    # 更新输入
    stu_init_mes = stu_msg
